package dbhandler;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class BeanUtil {
    public static Object Bean(ResultSet rs,Class<?> type){
        Object o = null;
        try {
            //获取实例
            o = type.newInstance();
            //获取结果集所有的列和列名
            ResultSetMetaData metaData = rs.getMetaData();
            //遍历列的长度
            for (int i=0;i<metaData.getColumnCount();i++){
                //列名
                String columnName = metaData.getColumnName(i+1);

                setValue(columnName,type,rs,o);
            }
        } catch (Exception e) {
            System.out.println("出现异常"+e.getMessage());
        }
        return o;
    }

    private static void   setValue(String columnName,Class<?> type,ResultSet rs,Object o) throws SQLException, IllegalAccessException {
        //获取所有实体类的属性名
        Field[] field=type.getDeclaredFields();
        for (Field f:field){
            f.setAccessible(true);
            //判断是否有Column这个注解，有的话就获取注解的值，没有直接获取属性的值
            String fieldName = f.isAnnotationPresent(Column.class) ? f.getAnnotation(Column.class).value() : f.getName();
            //如果获取的名字等于字段名
            if (columnName.equalsIgnoreCase(fieldName)){
                //判断是否是基本类型，然后赋值
                Object value = ColumnUtil.convertColumn(columnName, rs, f);
                f.set(o, value);
                break;
            }
        }
    }
}
